next[{x_,y_}]:=
Which[
And[y>=0,EvenQ[y],x==1], {x, y+1},
And[y>=0,OddQ[y], y>x-1], {x+1,y},
And[y>=0,EvenQ[y], 1<=x-1≤y],  {x-1,y},
And[1-x<y≤x-1, EvenQ[x]],  {x,y-1},
And[1-x≤y<x-1, OddQ[x]],  {x,y+1},
And[y<0,OddQ[y], x==1],  {x, y-1},
And[y<0,OddQ[y], y≤1-x], {x-1, y},
And[y<0,EvenQ[y], y<1-x], {x+1,y}]

Graphics[Line[NestList[next, {1,0}, 359]], Axes->True, AxesOrigin->{0,0}]

nnext[{x_, y_}]:=nnext[{x,y}]= Module[{nnn=next[{x, y}]},
While[GCD@@nnn>1, nnn=next[nnn]];nnn]

table[n_]:=Table[{i,Divide@@Reverse@Nest[nnext, {1,0}, i]},{i,0, n}]

ListPlot[table[5000], Filling->Axis, PlotRange->All]

(* Performs next[] until reaching a pair with GCD 1, and returns the list from input to final output. *) 
path[p_(* a pair*)]:=Module[
{nnn=next[p], ls},
ls={p, nnn};
While[GCD@@nnn>1, nnn=next[nnn];AppendTo[ls,nnn]];
ls]

mydisk[{a_,b_}]:={{EdgeForm[Black],Opacity[.8],Orange,Disk[{a,b}, 2/5]},  Text[If[a==1, b,ToString[b]<>"/"<>ToString[a]], {a,b}]}

myline[ls_]:=Module[{a=(3ls[[1]]+2ls[[2]])/5 , z=(3ls[[-1]]+2ls[[-2]])/5}, 
{Thick, {Orange,Line[Append[Drop[Prepend[Drop[ls,1],a],-1],z]]}, mydisk[ls[[-1]]]}]

myslope[{a_,b_}]:=Line[{{0,0}, ((Norm[{a, b}]-2/5)/Norm[{a, b}]){a, b}}]

Graphics[myline[path[{11,4}]]]

Graphics[{
{Blue, Table[
myslope[Nest[nnext, {1,0}, i]], {i,0, 163}]
},
mydisk[{1,0}],Table[myline[path[Nest[nnext, {1,0}, i]]], {i, 0, 162}]}, Axes->True, AxesOrigin->{0,0}, ImageSize->475]